import axios from 'axios'
import { message } from 'antd'

// 创建axios实例
const request = axios.create({
  // baseURL: 'http://192.168.30.57:8000',
  //'http://192.168.65.139:8081',
  // baseURL: 'http://192.168.65.139:8081',
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
  },
});

// 请求拦截器
request.interceptors.request.use((config) => {
  // 检查token是否存在
  const token = localStorage.getItem('token')
  if (token) {
    config.headers['Authorization'] = `Token ${encodeURIComponent(token)}`
  }
  // json序列化
  if ((config.method === 'post' || config.method === "put" || config.method === "delete") &&
    !(config.data instanceof FormData)) {
    config.data = JSON.stringify(config.data);
  }
  return config;
},
  (error) => {
    return Promise.reject(error)
  });

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 请求成功，直接返回数据
    return response.data;
  },
  (error) => {
    // 构建错误响应对象
    const errorResponse = {
      message: error.response?.data?.message || error.response?.data?.detail || error.message || '请求失败',
      status: error.response?.status,
      data: error.response?.data
    };

    // 处理token失效的情况（401 Unauthorized）
    if (error.response?.status === 401) {
      // 清除本地存储的token
      localStorage.removeItem('token');
      
      // 显示token失效提示
      message.error('登录已过期，请重新登录');
      
      // 延迟跳转到登录页，确保提示信息能够显示
      setTimeout(() => {
        // 跳转到登录页面
        window.location.href = '/login';
      }, 1000);
      
      // 返回特定的错误信息
      return Promise.resolve({
        ...errorResponse,
        message: '登录已过期，请重新登录',
        needLogin: true
      });
    }

    // 其他错误情况，正常返回错误信息
    return Promise.resolve(errorResponse);
  }
);

export default request;
